2225 ERR = 0: IF NOT ERR THEN PRINT DOS$"OPEN "F$"@INDEXES,L"IL
2230 PRINT DOS$"READ "F$"@INDEXES,R1"
2235 ERR = 0: IF NOT ERR THEN INPUT ID$: GOTO 2245
2240 PRINT DOS$"CLOSE "F$"@INDEXES": RETURN
2245 NI = NI +1:ID$(NI) = ID$: GOTO 2235
3000 REM
3010 REM *** MAIN PROGRAM LOOP
3015 REM *** HERE WE GET THE
3020 REM *** COMMAND AND THEN
3025 REM *** ACT ON IT
3050 GOSUB 5000: REM MAIN MENU
3055 REM
3060 GOSUB 6000: REM DECIPHER
3065 GOTO 3050
4000 REM *** SHUTDOWN
4097 GOSUB 1065: REM DO TITLES
4100 PRINT DOS$"CLOSE"
4998 VTAB 21: PRINT "ASARM RUN COMPLETE."
4999 END
5000 REM *** MAIN MENU
5025 IF VIDEO THEN TEXT : HOME : NORMAL
5030 VTAB 1: PRINT "THE FOLLOWING OPTIONS ARE AVAILABLE : ": PRINT : PRINT
5032 PRINT " SHOW) SHOW THE RECORD LAYOUT": PRINT
5035 PRINT " ENTER) ENTER A DATA RECORD"
5040 PRINT " DELETE) DELETE A DATA RECORD"
5045 PRINT " MODIFY) MODIFY A DATA RECORD"
5050 PRINT " DISPLAY) DISPLAY A DATA RECORD"
5052 PRINT " RECOVER) RECOVER A DELETED RECORD"
5055 PRINT : PRINT " LIST) LIST A SERIES OF RECORDS"
5057 PRINT " DLIST) LIST ONLY DELETED RECORDS"
5060 PRINT " PRINT) PRINT A SERIES OF RECORDS"
5061 PRINT " DPRINT) PRINT ONLY DELETED RECORDS"
5062 PRINT : PRINT " SORT) SORT THE RECORDS BY KEY"
5063 PRINT " SEARCH) SEARCH FOR A RECORD"
5065 PRINT : PRINT " STOP) STOP PROCESSING"
5075 VTAB 23: CALL -868: INPUT "WHICH DO YOU WISH : ";RESPNSE$
5076 IF RE$ = "" THEN 5075
5080 RE$ = LEFT$(RE$,3): IF RE$ = "ENT" OR RE$ = "DEL" OR RE$ = "MOD" OR RE$ = "DIS" OR RE$ = "SOR" OR RE$ = "LIS" OR RE$ = "PRI" OR RE$ = "STO" OR RE$ = "REC" OR RE$ = "SHO" THEN RETURN
5081 IF RE$ = "DLI" OR RE$ = "DPR" OR RE$ = "SEA" THEN RETURN
5085 VTAB 23: CALL -868: PRINT "<<< THAT IS NOT ONE OF THE CHOICES >>>": FOR PAUSE = 1 TO 1500: NEXT PAUSE: GOTO 5075
6000 REM *** COMMAND SWITCHING
6025 IF RE$ = "ENT" THEN 10000: RETURN
6035 IF RE$ = "DEL" THEN 11000: RETURN
6045 IF RE$ = "DIS" THEN 12000: RETURN
6055 IF RE$ = "MOD" THEN 13000: RETURN
6065 IF RE$ = "LIS" THEN 14000: RETURN
6066 IF RE$ = "DLI" THEN 14000: RETURN
6075 IF RE$ = "PRI" THEN 14000: RETURN
6076 IF RE$ = "DPR" THEN 14000: RETURN
6085 IF RE$ = "REC" THEN 15000: RETURN
6095 IF RE$ = "SHO" THEN 16000: RETURN
6105 IF RE$ = "SOR" THEN 19000: RETURN
6107 IF RE$ = "SEA" THEN 20000: RETURN
6115 IF RE$ = "STO" THEN POP : RETURN
6125 RETURN
10000 REM *** ENTER RECORD
10025 IF VIDEO THEN TEXT : HOME : NORMAL
10030 GOSUB 10100: REM GET REC#
10032 IF RN >MR THEN VTAB 23: INPUT "THERE IS NO MORE MEMORY SPACE AVAILABLE FOR YOU TO STORE RECORDS. HIT RETURN WHEN YOU ARE READY TO CONTINUE : ";RE$: RETURN
10035 GOSUB 10200: REM ENTER IT
10036 IF I = 1 AND RE$(I) = "" THEN RETURN
10037 GOSUB 10300: REM DISPLAY
10040 IF RE$ = "Y" THEN GOSUB 10400: REM OUTPUT IT
10050 GOTO 10025
10100 REM *** GET A RECORD#
10115 REM *** TO ENTER DATA
10130 IF NI = 0 THEN 10150
10135 FOR I = 1 TO NI
10140 IF LEFT$(ID$(I),1) = "/" THEN RN = VAL( RIGHT$(ID$(I),4)):IN = I: RETURN
12055 VTAB 23: CALL -868: INPUT "HIT RETURN WHEN READY TO CONTINUE : ";RE$
12099 GOTO 12030
12100 REM *** GET A RECORD#
12125 VTAB 23: CALL -868: INPUT "WHAT IS THE RECORD IDENTIFIER : ";RE$
12126 IF RE$ = "" THEN RETURN
12130 IF LEN(RE$) > VAL(FL$(1)) THEN VTAB 23: CALL -868: PRINT "THE RECORD NUMBER IS " VAL(FL$(1))" CHARACTERS LONG": FOR PA = 1 TO 1000: NEXT PA: GOTO 12125
12135 IF LEN(RE$) < VAL(FL$(1)) THEN RE$ = LEFT$("000000", VAL(FL$(1)) - LEN(RE$)) +RE$
12195 RETURN
12200 REM *** FIND THE RECORD
12222 FOUND = FALSE
12224 IF NI <1 THEN 12240
12225 FOR I = 1 TO NI
12227 IF LEFT$(ID$(I),1) = "/" THEN 12235
12230 IF MID$ (ID$(I),2, VAL(FL$(1))) = RE$ THEN FOUND = I: GOTO 12240
12235 NEXT
12240 IF NOT FOUND THEN VTAB 23: CALL -868: PRINT "THAT RECORD IS NOT ON FILE": FOR PA = 1 TO 1000: NEXT PA
20125 VTAB 23: CALL -868: INPUT "FIELD TO SEARCH ON : ";RE$
20130 IF RE$ = "" THEN RETURN
20135 FOR RI = 1 TO NF
20140 IF RE$ = FI$(RI) THEN 20155
20145 NEXT
20150 VTAB 23: CALL -868: PRINT "THAT FIELD DOES NOT EXIST.": FOR PA = 1 TO 1000: NEXT PA:RI = 0: RETURN
20155 RETURN
20200 REM *** 2 OR ALL CHARS
20225 VTAB 23: CALL -868: INPUT "ALL CHARACTER MATCH OR FIRST TWO : ";ALL$
20230 ALL$ = LEFT$(ALL$,1): IF ALL$ = "A" OR ALL$ = "A" OR ALL$ = "F" OR ALL$ = "F" THEN RETURN
20235 VTAB 23: CALL -868: PRINT "TYPE 'A' OR 'F' PLEASE.": FOR PA = 1 TO 1000: NEXT PA: GOTO 20225
20300 REM *** GET CONSTANT
20325 VTAB 23: CALL -868: INPUT "WHAT IS THE CONSTANT : ";RC$
20327 IF RC$ = "" THEN RETURN
20330 R2$ = LEFT$(RC$ +" ",2)
20335 IF LEN(RC$) < VAL(FL$(RI)) THEN RC$ = RC$ + LEFT$(BL$, VAL(FL$(RI)) - LEN(RC$))
20340 IF LEN(RC$) > VAL(FL$(RI)) THEN VTAB 23: CALL -868: PRINT "THE FIELD IS "FL$(RI)" CHARS LONG.": FOR PA = 1 TO 1000: NEXT :RC$ = ""
20345 IF RI = 1 THEN R2$ = RC$
20390 RETURN
20400 REM *** DO THE SEARCH
20422 ST = 1
20425 GOSUB 20500: REM FIRST MATCH
20430 IF NOT FO THEN RETURN
20435 GOSUB 20600: REM SECOND MATCH
20440 IF NOT FO THEN 20425
20450 GOSUB 12400: REM DISPLAY
20455 GOSUB 20700: REM INPUT
20460 GOTO 20425
20500 REM *** GET NEXT MATCH
20522 R2 = VAL(FL$(I)) +(2 *(RI -1)): IF RI = 1 THEN R2 = 2
20523 RT = VAL(FL$(RI)): IF RI >1 THEN RT = 2
20524 IF ST >NI THEN 20590
20525 FOR I = ST TO NI
20527 RT$ = MID$ (ID$(I),R2,RT)
20535 IF RT$ = R2$ THEN FOUND = VAL( RIGHT$(ID$(I),4)): GOTO 20595
20540 NEXT I
20590 FOUND = FALSE
20595 ST = I +1: RETURN
20600 REM *** GET RECORD/MATCH
20625 GOSUB 12300: REM GET REC
20630 IF RE$(RI) = RC$ THEN FOUND = TRUE: RETURN
20632 IF ALL$ = "F" OR ALL$ = "F" THEN FOUND = TRUE: RETURN
20635 FOUND = FALSE: RETURN
20700 REM *** CONTINUE ?
20725 VTAB 23: HTAB 1: CALL -868: PRINT "S TO STOP, OR RETURN TO CONTINUE : ";: GET TMP$
20730 IF TMP$ = "S" OR TMP$ = "S" THEN POP : POP : RETURN
20735 IF TMP$ = CHR$(13) THEN PRINT : RETURN
20740 GOTO 20725
30000 REM *** ERROR RECOVERY
30015 REM *** ROUTINES
30030 ERR = PEEK(222)
30035 IF ERR = 5 THEN RESUME : REM * JUST AN END OF FILE *
30040 IF ERR = 9 THEN RESUME : REM * JUST A DISK FULL *
30045 IF ERR = 4 THEN VTAB 23: CALL -958: PRINT "THE DISK IS WRITE PROTECTED": FOR PA = 1 TO 1000: NEXT PA: GOTO 4000
30050 IF ERR = 8 THEN VTAB 23: CALL -958: PRINT "THE DISK HAD AN I/O ERROR": FOR PA = 1 TO 1000: NEXT PA: GOTO 4000
30055 IF ERR = 10 THEN VTAB 23: CALL -958: PRINT "A FILE IS LOCKED AND SHOULD NOT BE": FOR PA = 1 TO 1000: NEXT PA: GOTO 4000
30100 REM *** UNEXPECTED ERROR
30125 IF VIDEO THEN TEXT : HOME : NORMAL
30130 IF TESTING THEN POKE 216,0: PRINT "**** ERROR ****": RESUME
30133 IF ERR = 255 THEN PRINT "OPERATOR ABORT...": END
30135 REM
30140 REM GOSUB 4000:REM SHUTDOWN
30145 REM
30150 VTAB 3: PRINT " I'M SORRY, BUT AN UNEXPECTED ERROR HAS OCCURED DURING PROGRAM EXECUTION. IT WOULD BE WISE AT THIS TIME TO RESTOREYOUR FILE WITH A BACKUP FILE."
30155 X = PEEK(218) + PEEK(219) *256: PRINT : PRINT "ERROR WAS IN LINE #";X